Nakama & Unity MatchMaking
2人のプレイヤーを、同じマッチに接続させてみる。
Nakamaがサポートする要素
RealTime
Authoritative
server-authoritative
専用サーバー
入力やイベントなど、clientからの情報をserverが受け取る
playerの移動、hpの増減などを全てサーバーが管理する。
チートがしづらい
client-authoritative
P2P
プレイヤーたちの中にホストを決めて、メッセージングを仲介するだけ
Server側のAuthoritativeなコードは、go, luaで書ける。
マッチメーカーの実装
2ステップ
1. socket.AddMatchmakerAsync()
引数にはquery
2. Matchが見つかったときのイベントハンドラー
code: matchmaking.cs
// IMatchmakerMatched interfaceを実装したオブジェクトを受け取る
socket.ReceivedMatchmakerMatched += async matched =>
{
Debug.LogFormat("Match: {0}", matched);
var match = await socket.JoinMatchAsync(matched);
};
await socket.ConnectAsync(session);
// query, min, max
await socket.AddMatchmakerAsync("*", 2, 2);
Precences: マッチした相手のList
MatchやChannelは Presencesと呼ばれるプロパティを持っている。
このプロパティに、そのMatchやChannelに参加しているプレイヤーID等が入ってる。
プレイヤーが参加/退席したときのコールバックを追加することもできる。
ユースケース
FPSなどで、ScoreBoardを開いてマッチのプレイヤーを一覧する。